package com.ang.springboot.provider.direct;

import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DirectConfig {

    public final String queueName = "directQueue";
    public final String exchangeName = "directExchange";
    public final String routKey = "directKey";

    /**
     * 创建队列
     * @return
     */
    @Bean
    public Queue DirectQueue(){
        /**
         * 创建队列，参数说明：
         * String name：队列名称。
         * boolean durable：设置是否持久化，默认是 false。durable 设置为 true 表示持久化，反之是非持久化。
         * 持久化的队列会存盘，在服务器重启的时候不会丢失相关信息。
         * boolean exclusive：设置是否排他，默认也是 false。为 true 则设置队列为排他。
         * boolean autoDelete：设置是否自动删除，为 true 则设置队列为自动删除，
         * 当没有生产者或者消费者使用此队列，该队列会自动删除。
         * Map<String, Object> arguments：设置队列的其他一些参数。
         */

        //一般设置一下队列的持久化就好,其余两个就是默认false
        return new Queue(queueName, true);
    }

    /**
     * 创建交换机
     * @return
     */
    @Bean
    public DirectExchange DirectExchange(){
        /**
         * 创建交换器，参数说明：
         * String name：交换器名称
         * boolean durable：设置是否持久化，默认是 false。durable 设置为 true 表示持久化，反之是非持久化。
         * 持久化可以将交换器存盘，在服务器重启的时候不会丢失相关信息。
         * boolean autoDelete：设置是否自动删除，为 true 则设置队列为自动删除，
         */
        return new DirectExchange(exchangeName,true,false);
    }

    //绑定queue和exchange
    @Bean
    Binding bindingDirect(){
        return BindingBuilder.bind(DirectQueue()).to(DirectExchange()).with(routKey);
    }
}
